//
//  MJUserAccountViewModel.swift
//  新浪微博
//
//  Created by MaJi on 16/4/10.
//  Copyright © 2016年 MaJi. All rights reserved.
//

import UIKit
//全局变量
private let userInfoKey = "com.baidu.userifonKey"
//非常多的界面都会找viewmodel获取数据
//viewModel 处理业务逻辑 ,网络请求,数据缓存
class MJUserAccountViewModel: NSObject {
//   1.单例对象
    static let sharedAccount = MJUserAccountViewModel()
//    2.添加一个计算属性
    var userLogin:Bool {
        //1.account的token 如果不为空 && 用户token不过期 用户已经登录
        if let n = account where n.expires_date?.compare(NSDate()) == NSComparisonResult.OrderedDescending{
            return true
        }
        //将userAccount 设置为 nil(到这一步说明已经过期,或account没值)
        account = nil
        return false
    }
    
//    3.全局变量account是储存用户信息的模型,便于外界调用
    var account:MJUserAccount?
    override init() {
        super.init()
//        去沙盒中取值,且只取一次,减少磁盘IO
        account = self.loadUserInfo()
    }
    
//    //MARK: 使用授权码 请求accesstoken
    func loadAccessToken(code:String , finished:(isSuccess:Bool) -> ()){
//        let urlString = "https://api.weibo.com/oauth2/access_token"
        //AFN中参数 以字典的形式传递
        //        let parameters = ["client_id":"4117975720" , "client_secret":"8f9ac4594a25808fa82e89e0b9a84728" , "grant_type":"authorization_code" , "code":code , "redirect_uri":"http://www.baidu.com"]
        
//        let parameters = ["client_id":client_id,"client_secret":client_secret,"grant_type": "authorization_code","code":code,"redirect_uri":redirect_uri]
//        
//        HMNetworkTools.sharedTools.request(.POST, urlString: urlString, parameters: parameters) { (result, error) -> () in
//                        if error != nil {
//                        print(error)
//            //            SVProgressHUD.showErrorWithStatus("世界上最遥远的距离就是没有网络")
////               finished(isSuccess: false)
//                        return
//                    }
            //程序走到这里 就一定成功
//            print("此处打印result的值")
//            print(result)
        HMNetworkTools.sharedTools.loadAccessToken(code) { (result, error) -> () in
            if error != nil {
//                加载token失败
                finished(isSuccess: false)
                return
            }
//            获取token成功
            //            获取用户信息
            self.loadUserInfo(result!,finished: finished)
        }
        
        
    }
    
    //    查询用户信息
    private func loadUserInfo(result:AnyObject , finished: (isSuccess:Bool) -> ()){
        //        //尝试将AnyObject转换为字典
        
        guard let dict = result as? [String : AnyObject] else{
//            SVProgressHUD.showErrorWithStatus("数据错误")
            finished(isSuccess: false)
            return
        }
        //        print(dict)
        let token = dict["access_token"]!
        let uid = dict["uid"]!
        HMNetworkTools.sharedTools.loadUserInfo(token, uid: uid) { (result, error) -> () in
            if error != nil {
//                加载失败
                print(error)
                finished(isSuccess: false)
                return
            }
//            加载用户信息成功
//            print(result)
            
            guard var userInfoDict = result as? [String : AnyObject] else {
                finished(isSuccess: false)
                return
            }
            
            //合并字典
            for (k,v) in dict {
                userInfoDict[k] = v
            }
            //            print(userInfoDict)
            finished(isSuccess: true)
            self.saveUserInfo(userInfoDict)
        }
    }
}


//        let parameters = ["access_token":token,"uid":uid]
//        let urlString = "https://api.weibo.com/2/users/show.json"
////        "https://api.weibo.com/oauth2/access_token"
//        //    查询用户信息
//        HMNetworkTools.sharedTools.request(.GET, urlString: urlString, parameters: parameters) { (result, error) -> () in
//            if error != nil {
//                print(error)
//                finished(isSuccess: false)
////                SVProgressHUD.showErrorWithStatus("世界上最遥远的距离就是没有网络")
//                return
//            }
//            //            获取用户信息成功
//            print("获取用户信息成功")
//            print(result)
            //将AnyObject 转换为字典类型

// 存储数据 , 获取数据
extension MJUserAccountViewModel{
    func saveUserInfo(accountDict:[String:AnyObject]){
        
        //            print(userInfoDict)
        //            保存完整字典 (注意王偏好设置存至不能为空,否则崩)
        let userDefaults = NSUserDefaults.standardUserDefaults()
//        1.将字典信息转换为模型对象;同时过滤掉空值(字典转模型)
        let userAccount = MJUserAccount(dict: accountDict)
//        2.完成从未登录到登录状态后,account有值,从而在欢迎页面,label,头像有值(注意)
        self.account = userAccount
        //3.将对象的字典信息(用户信息)保存到偏好设置中
//        3.1模型转字典, 获取模型对象字典信息
        let keys = ["access_token","avatar_large","name","expires_in","uid"]
        let accountDict = userAccount.dictionaryWithValuesForKeys(keys)
//        3.2 将对象的字典信息保存到偏好设置中
        userDefaults.setObject(accountDict, forKey: userInfoKey)
        //4.同步
        userDefaults.synchronize()
        print(NSHomeDirectory())
    }
    //获取沙盒中存储的数据
    //    提供外界取值的方法,返回一个模型
    func loadUserInfo () -> MJUserAccount?{
        //1.获取字典信息
        guard let dict = NSUserDefaults.standardUserDefaults().objectForKey(userInfoKey) as? [String:AnyObject] else{
            return nil
        }
        //        2.字典转模型
        let account = MJUserAccount(dict: dict)
        return account
    }

}


